- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин
Шрифт:
Интервал:
Закладка:
Другой способ использования CSS-стилей для изменения внешнего вида по умолчанию узла графа сцены – это применение метода setStyle класса Node, содержащего в качестве аргумента строку блока объявлений CSS-правила.
Переключатель CheckBox
Компонент CheckBox создается с помощью конструктора, в котором указывается метка переключателя.
Метку также можно установить методом setText.
А первоначальный выбор переключателя можно установить методом setSelected (true).
С помощью метода setIndeterminate (true) можно установить неопределенное состояние выбора переключателя.
И метод setAllowIndeterminate (true) добавляет это неопределенное состояние к двум другим состояниям выбора переключателя.
Таким образом, у переключателя появляются три состояния.
Отличие набора свойств компонента CheckBox от набора свойств компонента Button заключается в наличии свойств indeterminate, selected и allowIndeterminate.
У компонента CheckBox есть метод selectedProperty, который возвращает свойство состояния выбора переключателя.
И метод indeterminateProperty, который возвращает свойство неопределенного состояния переключателя.
К этим свойствам можно присоединить слушателя изменения свойства.
И о свойствах JavaFX компонентов мы поговорим далее.
Компоненты JavaFX Beans и связывание данных
Платформа Java определяет JavaBeans-компоненты, которые используются для передачи данных.
JavaBeans-компоненты представлены Java-классами, которые созданы по определенным правилам.
Классы JavaBeans-компонентов имеют публичный конструктор без параметров, свойства класса доступны через методы get и set, классы имеют методы add и remove добавления и удаления слушателей событий, и классы обладают свойством сериализуемости (преобразования в последовательность байт и обратно) путем реализации интерфейса java.io.Serializable.
Кроме того, платформа Java содержит программный интерфейс JavaBeans API для создания и обработки JavaBeans-компонентов.
Все Swing и AWT компоненты являются идеальными JavaBeans компонентами.
JavaFX компоненты не являются классическими JavaBeans компонентами, так как они не реализуют интерфейс Serializable.
Сериализация JavaFX компонентов возможно через декларативное FXML описание интерфейса, с которым мы познакомимся позже.
Однако платформа JavaFX расширяет JavaBeans-модель, определяя JavaFX-свойства.
И именно JavaFX-свойства используют JavaFX компоненты.
JavaFX-свойства реализованы пакетами beans, beans.binding, beans.property и beans.value программного интерфейса JavaFX API.
Конечной реализацией JavaFX-свойств являются классы пакета beans.property SimpleХХХProperty для свойств записи и чтения и классы ReadOnlyХХХWrapper для свойств только чтения.
Данные классы реализуют интерфейсы Observable, Property, ReadOnlyProperty, ObservableValue и WritableValue, предоставляя методы:
addListener и removeListener присоединения и удаления слушателей недействительности и изменения значения свойства.
Методы bind, bindBidirectional, unbind и unbindBidirectional связывания и удаления связывания значения свойства.
Методы getBean и getName, возвращающий объект JavaFX Beans-компонента, содержащего свойство, и возвращающий имя свойства;
Методы get и set чтения и записи значения свойства.
Кроме того, данные классы расширяют классы XXXExpression пакета beans.binding, обеспечивающие для JavaFX-свойств методы создания объектов XXXBinding, которые представляют выражения, результат которых синхронизирован со значением данного свойства и со значением объекта, выступающим в качестве аргумента вышеупомянутых методов.
Таким образом, JavaFX Beans-компонент представлен классом, имеющим:
Во-первых, публичный конструктор без параметров.
Во-вторых методы get () и set () доступа к свойствам класса.
И в-третьих методы xxxProperty (), возвращающие JavaFX-свойства.
В качестве примера рассмотрим компонент Button.
Класс Button имеет унаследованные от класса Node свойства, унаследованное от класса Parent свойство, унаследованные от класса Control свойства, унаследованные от класса Labeled свойства, унаследованные от класса ButtonBase свойства, и собственные свойства.
Какие-то из этих свойств доступны для чтения и записи, а какие-то – только для чтения.
Для каждого свойства чтения и записи класс Button предоставляет методы доступа get и set, а для свойства только чтения – только метод get, а также метод xxxProperty, возвращающий само JavaFX-свойство ХХХProperty или ReadOnlyХХХProperty.
Рассмотрим свойство text класса Button.
Метод textProperty кнопки Button возвращает JavaFX-свойство StringProperty, определяющее значение свойства text.
Установить значение данного JavaFX-свойства и соответственно значение свойства text кнопки Button можно методом set интерфейса WritableObjectValue или методом setValue класса StringProperty.
Возвращает значение свойства text кнопки Button метод get интерфейса ObservableObjectValue или метод getValue класса StringExpression.
При этом методы getBean и getName вернут класс Button и имя свойства text.
Применяя метод bind интерфейса Property к JavaFX-свойству текста кнопки Button можно связать его значение, например, со значением JavaFX-свойства текста поля TextField так, что, набирая текст в поле TextField, он будет автоматически становиться текстом кнопки Button.
Когда объекты участвуют в связывании, изменения, внесенные в один объект, будут автоматически отражаться в другом объекте.
Связывание собирается из одного или нескольких источников, известных как зависимости.
Связывание просматривает список зависимостей для изменений, а затем автоматически обновляется после обнаружения каких-либо изменений.
Применяя метод bindBidirectional класса StringProperty к JavaFX-свойству текста кнопки Button можно связать его значение, например, со значением JavaFX-свойства текста поля TextField так, что в нем будет автоматически отображаться измененный текст кнопки Button.
Организовать прослушивание изменения значения JavaFX-свойства текста кнопки Button позволяет метод addListener интерфейса ObservableValue.
JavaFX-свойства поддерживают отложенные вычисления своих значений, т.е. значение JavaFX-свойства пересчитывается не сразу после своего изменения, а только тогда, когда это значение на самом деле запрашивается.
И в промежутке между изменением значения и его пересчетом генерируется событие недействительности значения.
Метод addListener (InvalidationListener listener) интерфейса Observable позволяет организовать прослушивание недействительности значения JavaFX-свойства текста кнопки Button.
В этом примере при нажатии кнопки Button возникнет событие недействительности значения JavaFX-свойства текста.
Так как JavaFX-свойство StringProperty текста кнопки Button расширяет класс StringExpression, его методы позволяют организовать различного рода связанные вычисления.
В этом примере, при вводе текста в поле field1, вводимый текст соединяется с текстом кнопки, и результат отображается в поле field2.
В JavaFX приложениях также можно использовать самостоятельные JavaFX-свойства, безотносительно к JavaFX-компонентам.
Для этого необходимо создавать экземпляры классов SimpleХХХProperty пакета beans.property.
Так как данные классы расширяют классы XXXExpression пакета beans.binding, при этом можно создавать связанные вычисления.
Для создания связанных вычислений платформа JavaFX предлагает два типа программного интерфейса – High-Level Binding API и Low-Level Binding API.
Программный интерфейс High-Level Binding API также подразделяется на Fluent API и на применение класса Bindings.
Fluent API предоставляет методы для объектов, тогда как класс Bindings использует статические фабричные методы.
Здесь приведен пример использования Fluent API.
В этом примере, в поле TextField отобразится сумма значений двух JavaFX-свойств SimpleDoubleProperty.
Здесь приведен пример использования класса Bindings для создания связанных вычислений.
В этом примере, в поле TextField также отобразится сумма значений двух JavaFX-свойств SimpleDoubleProperty.
Здесь приведен пример использования Low-Level Binding API для создания связанных вычислений.
Для применения Low-Level Binding API необходимо расширять классы ХХХBinding пакета beans.binding с переопределением их метода computeValue.
Здесь

